iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
AI & Data

AI白話文運動系列之「A!給我那張Image!」系列 第 9

內捲給我捲起來--AI中的捲積運算

  • 分享至 

  • xImage
  •  

前言

在電腦視覺或影像處理任務中,捲積(Convolution)是很重要的概念,可以幫我們獲得影像的特徵或相關性。用來處理影像的AI模型中也基於這樣的概念,誕生了許多捲積神經網路(Convolutional Neural Network)的架構,因此,在後續討論這些架構之前,今天,先讓我們來好好理解最基礎的概念吧!

先備知識

  1. 微積分(最好可以看得懂積分公式,不會也沒關係)
  2. 一些影像處理的概念(一張圖片要怎麼存在電腦裡,像素值是甚麼...)

看完今天的內容你可能會知道......

  1. 捲積是甚麼?如何計算
  2. 影像當中的捲積應用
  3. 如何利用捲積提取特徵

一、捲積是甚麼?

  • 捲積是數學中的概念,用來計算兩個函數之間的「相似性」,這是捲積的定義:https://chart.googleapis.com/chart?cht=tx&chl=%5C%5B%20(f%20*%20g)(t)%20%3D%20%5Cint_%7B-%5Cinfty%7D%5E%7B%5Cinfty%7D%20f(%5Ctau)%20%5Ccdot%20g(t%20-%20%5Ctau)%20%5C%2C%20d%5Ctau%20%5C%5D,這邊我們可以看到兩個函數https://chart.googleapis.com/chart?cht=tx&chl=%5C%5B%20f%20%5C%5Dhttps://chart.googleapis.com/chart?cht=tx&chl=%5C%5Bg%5C%5D ,接著我們將「反向」的https://chart.googleapis.com/chart?cht=tx&chl=%5C%5Bg%5C%5Dhttps://chart.googleapis.com/chart?cht=tx&chl=%5C%5Bf%5C%5D 相乘後計算積分,這個動作在數學上看起來很複雜,可是,它其實就是把一個函數「左右翻轉」後,從最左邊網最右邊移動,中間不斷去計算與另外一個函數圖形的「重疊面積」,就像下圖所示:https://ithelp.ithome.com.tw/upload/images/20230924/20163299Nrq0vNN6Es.png
  • 為甚麼說是在計算相似性呢?因為只有當兩個函數完全重疊的面積才會被計算到,這意味著,如果最後計算出來的面積越多,這兩個函數長得越。
  • 更詳細的定義與動畫圖可以參考:https://zh.wikipedia.org/zh-tw/%E5%8D%B7%E7%A7%AF

二、影像中的捲積

  • 在影像中,我們會將一張影像以矩陣的方式保存,矩陣中的每個位置對應的是影像中的像素(Pixel),而矩陣中的每個元素值對應的自然就是所謂的像素值(Pixel value)。將較於上面討論的公式,這樣的應用是「離散」的,因此我們會使用不太一樣的公式:https://chart.googleapis.com/chart?cht=tx&chl=%5C%5B%20(f%20*%20g)%5Bn%5D%20%3D%20%5Csum_%7Bm%3D-%5Cinfty%7D%5E%7B%5Cinfty%7D%20f%5Bm%5D%20%5Ccdot%20g%5Bn-m%5D%20%5C%5D ,或是https://chart.googleapis.com/chart?cht=tx&chl=%5C%5B%20(I%20%5Cast%20K)(m%2C%20n)%20%3D%20%5Csum_%7Bi%3D-%5Cinfty%7D%5E%7B%5Cinfty%7D%20%5Csum_%7Bj%3D-%5Cinfty%7D%5E%7B%5Cinfty%7D%20I(m%20-%20i%2C%20n%20-%20j)%20%5Ccdot%20K(i%2C%20j)%20%5C%5D ,前者是離散的函數型,後者是矩陣型的運算。
  • 和我們在上面討論的概念(連續型)相似,捲積最重要的概念就是「翻轉」+「相似性計算」,因此換成矩陣的話,我們也可以用同樣的方式來計算,就像下面所顯示的:https://ithelp.ithome.com.tw/upload/images/20230924/20163299joWMachSYs.png
  • 最左邊是我們是輸入影像,橘黃色的是我們用來左右/上下滑動的矩陣,在目標區域內將兩者相乘後可以得到綠色的結果,最後加總就可以得到藍色的結果。
  • 我們把這樣的橘黃色矩陣從「由左至右」+「由上到下」的反覆計算其與覆蓋區域的相乘與加總結果,就像下圖所描述的:https://ithelp.ithome.com.tw/upload/images/20230924/20163299SACV0PLQ6t.png 可以想像,經過這樣的過程之後,我們可以得到一張與輸入影像形狀相同但大小不同的「特徵圖」,這個特徵圖代表輸入影像中所有區域與橘黃色矩陣的相似程度。
  • 所以,如果我今天要做一個貓狗辨識系統,我希望可以靠耳朵、尾巴等特徵辨識是貓還是狗,那麼我只需要設計出一大堆橘黃色的矩陣,一個代表耳朵,一個代表尾巴...,讓這些矩陣和輸入影像做捲積計算,最後看這張影像在哪些特徵上面有最高的相似性,進一步判斷這些特徵是屬於貓或是屬於狗的,就可以知道這張影像是甚麼了。
  • 對沒有學過影像處理的人可能覺得到這邊還是很抽象,設計矩陣?這個矩陣還要能夠代表某些特徵?其實這是因為我們還沒把「顏色」跟「數值」之間有甚麼聯繫弄清楚,因為電腦不像我們可以看到五彩繽紛的世界,他們只能接受數字型態的東西,所以我們將人眼可以看到的顏色按照數字一一對應,通常是對應成[0, 255]或是[0, 1]這兩種範圍,就像下圖所示,有了這樣概念之後,我們就可以設計出一些矩陣用來代表某種固定的特徵了。
    https://ithelp.ithome.com.tw/upload/images/20230924/201632994jTCrDfyEU.png
  • 註:在電腦視覺或數學領域中,我們會將上面的橘黃色矩陣稱為「核(Kernel)」,藉由不同的核就可以提取出不同的特徵。對影像當中的捲積感興趣的人可以看看這兩個網站,裡面有動畫圖跟更實際的例子可以參考:https://en.wikipedia.org/wiki/Kernel_(image_processing) 以及 https://developer.nvidia.com/discover/convolution

三、總結

  • 今天我們主要介紹了捲積這個在影像處理當中非常重要的概念,算是為之後介紹捲積神經網路(Convolutional Neural Network)做個鋪墊,在接著往下討論之前,這邊可以先留些懸念給大家思考:電腦「看」世界的方式跟人類不一樣,這樣我要怎麼確保我設計出來的特徵可以讓電腦做到我想要他做到的事?如果電腦需要很多特徵才能「認識」一張圖片的話,我是不是需要手動設計出很多特徵?可是我要怎麼保證這些特徵是有用的?有沒有更快速的方式?這些問題的答案會在明後兩天的內容中揭曉,大家可以一邊複習今天跟之前的內容一邊想想看!

上一篇
Pytorch實戰(二)--建立與訓練模型--以MLP為例
下一篇
Pytorch實戰(三)--建立與訓練模型--以簡單CNN模型為例
系列文
AI白話文運動系列之「A!給我那張Image!」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言